package BehavioralPattern.Command;

/**
 * @Classname : CommandClient
 * @Description : 测试 命令模式
 * 行为型——命令模式
 * 一、模式定义
 *   Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
 *   将一个请求封装成一个对象，从而把客户端的不同请求（队列或日志）参数化，并支持撤销恢复操作。
 *   优点：
 *     将请求和执行解耦，便于扩展和高层模块调用
 *   缺点：
 *     每个请求都会对应一个命令类，命令类数量可能会膨胀很大
 * 二、模式类图
 *    https://kdocs.cn/l/cvjPsrMnB8F6
 * 三、适用场景
 *   1、当使用命令时（控制命令、按钮操作等）
 * 四、应用举例
 *   1、DOS命令
 * @Author : chentianyu
 * @Date 2023/3/7 08:15
 */


public class CommandClient {
    public static void main(String[] args) {
        System.out.println("---------命令模式---------");
        // 定义执行者
        Invoker invoker = new Invoker();
        // 定义命令
        Command constructionContractSubmit = new ConstructionContractSubmit();
        Command ConstructionContractRecall = new ConstructionContractRecall();
        Command marketingContractSubmit = new MarketingContractSubmit();
        // 执行命令
        invoker.setCommand(constructionContractSubmit);
        invoker.action();
        invoker.setCommand(ConstructionContractRecall);
        invoker.action();
        invoker.setCommand(marketingContractSubmit);
        invoker.action();
    }
}

/** 20230307
 * ---------命令模式---------
 * 提交审批建造合同
 * 撤回审批建造合同
 * 提交审批营销合同
 */
